AWS CodePipelineことはじめ – 概要紹介
AWS CodePipeline
Code三兄弟のなかで最後にご紹介するのはAWS CodePipelineです。似た名称のAWSのサービスにAWS DataPipelineがありますがそれとは全く異なるサービスになっています。
AWS CodePipelineはアプリケーションの継続的デリバリーと継続的インテグレーションを実現するためのツールです。継続的デリバリーはソフトウェアのリリースプロセスを自動化することでリリースの負荷を減らし、素早くリリースを実施していく仕組みのことです。
AWS CodeDeployはアプリケーションのデプロイプロセスを自動化するためのツールとしてご紹介しましたが、AWS CodePipelineはビルド、テスト、デプロイなどのアプリのリリースプロセス全体を定義します。当然、デプロイにはCodeDeployの機能をそのまま利用することも可能です。
CodePipelineの用語確認
CodePipelineで利用される様々な用語を確認しておきます。
- Pipeline
- ビルド、テスト、デプロイなど、リリース作業に必要な一連のプロセスをまとめたもの。
- Revision
- ソースコードの変更や設定の修正など、CodePipelineが実行される
- Stage:
- リリースプロセスの論理的な作業単位。ビルド、テスト、デプロイといったくくり。
- Action:
- Stageの中で定義された、実行されるべきタスク。JenkinsでのCIやCodeDeployでのコミットなどがある。
- Transition
- あるステージから次のステージへの遷移。
CodePipelineの実行フロー
CodePipelineでは、Source actionで、ソースコードをどこから取得するかを定義します。現在では、GithubかS3を指定可能です。S3を指定する場合にはS3バケットのバージョン管理を有効にしておく必要があります。
特徴的なのは、例えばS3を利用する場合にはS3オブジェクトが変更された時には自動的にパイプラインの実行が走る点です。S3 Event Notificationなどのフックを設定する必要はありません。
パイプラインは画面上で定義した順番に実行されます。例えば
- ソースコードの取得
- テストの実行
- 環境へのデプロイ
という非常に単純なパイプラインを作成した場合、ソースコードを取得した後にテストが実行されます。もしもテストが失敗した場合にはその次の手順である環境へのデプロイは実行されません。テストが失敗したソースコードを修正して再度Source Targetにアップロードするか、手動でパイプラインプロセスの再開を指示するまでは中止された状態になります。
CodePipelineと連携するAWSのサービス
CodePipelineは以下のAWSサービスと連携して活用することができます。
- Amazon S3 : 上述した通り、S3はソースコードの配置場所として指定することが可能です。
- AWS CodeDeploy : こちらも上述の通り、デプロイプロセスをCodeDeployを使って処理することができます。
- AWS Elastic Beanstalk : デプロイ対象にBeanstalkアプリケーションを選択することも可能です。Beanstalk連携は今後試していきたいと思います。
CodePipelineと連携するAWS外のサービス
CodePipelineはAWSのマネージドサービス以外にもCIのための各種ツールとの連携がかのうになっています。現時点で連携可能なサービスは以下のものがあります。
- Source
- GitHub: ソースコード管理ツールとして利用可能
- Build
- Jenkins CI: アプリケーションのビルドとテストタスク実行サービスとして利用可能
- CloudBees: JenkinsのSaaSサービス。こちらもビルドとテストに利用可能
- Test
- Apica: アプリケーションの負荷テストとモニタリングを提供するSaaSサービス。デプロイ後に負荷試験を実施する際に利用可能。
- Blazemeter: JmeterやSelenium Web Driverなどを利用した統合テストを実施するためのSaaSサービス。
- Ghost Inspector: GUIを利用したWebアプリケーションのテスト機能を提供するSaaSサービス。
- Runscope: APIサーバのテストを実施するSaaSサービス。
- XebiaLabs: 継続的デリバリーを実現するために必要な機能を取り揃えたSaaSサービス。
まとめ
今回はCodePipelineの概要紹介となりました。CodePipelineは外部サービスと連携したリリースプロセスの構築ができるのが非常に特徴的です。ひとつ残念なのは、現時点ではソースコードの保存先としてAWS CodeCommitとの連携ができない点でしょうか。こちらは遠くない未来に実現されると信じていますので待ちたいと思います。
次回以降はCodePipelineを実際に活用しながら、リリース作業の自動化に取り組んでいきたいと思います。